// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once

// 预编译指令，确保头文件只被包含一次，防止重复定义

#include "Character/LyraCharacter.h"
// 包含基类 ALyraCharacter 的头文件

#include "LyraCharacterWithAbilities.generated.h"
// 包含UE生成的反射数据头文件

// 前向声明，避免循环包含
class UAbilitySystemComponent;
class ULyraAbilitySystemComponent;
class UObject;

// ALyraCharacter typically gets the ability system component from the possessing player state
// This represents a character with a self-contained ability system component.
// 类注释：ALyraCharacter通常从拥有的玩家状态获取能力系统组件
// 这个类代表一个拥有自包含能力系统组件的角色

UCLASS(Blueprintable)
// UCLASS宏，标记该类可在蓝图中使用
class LYRAGAME_API ALyraCharacterWithAbilities : public ALyraCharacter
// 类声明，继承自 ALyraCharacter，LYRAGAME_API 是DLL导出标记
{
	GENERATED_BODY()
	// UE宏，生成必要的反射代码体

public:
	// 构造函数声明，接受FObjectInitializer参数
	ALyraCharacterWithAbilities(const FObjectInitializer& ObjectInitializer);

	// 重写PostInitializeComponents方法
	virtual void PostInitializeComponents() override;

	// 重写获取能力系统组件的方法
	virtual UAbilitySystemComponent* GetAbilitySystemComponent() const override;

private:
	// The ability system component sub-object used by player characters.
	// 私有成员变量：玩家角色使用的能力系统组件子对象
	
	UPROPERTY(VisibleAnywhere, Category = "Lyra|PlayerState")
	// UPROPERTY宏，标记属性在编辑器中任何地方可见，分类为"Lyra|PlayerState"
	
	TObjectPtr<ULyraAbilitySystemComponent> AbilitySystemComponent;
	// 能力系统组件指针，使用TObjectPtr包装以支持nullptr检查
};